// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
import store from '@/store'

// 导入cookie 中的存储时间
import { getTiem } from '@/utils/auth'
import router from '@/router'

// 设置失效时间
const TheFailureTime = 60 * 60
// 过期时间函数
function ExpirationTime() {
  // 设置当前时间
  const currentTime = Date.now()
  return (currentTime - getTiem()) / 1000 > TheFailureTime
}
// token失效函数
const service = axios.create({
  baseURL: process.env.VUE_APP_BASE_API || '/api' // 设置axios请求的基础的基础地址
}) // 创建一个axios的实例
// service.interceptors.request.use() // 请求拦截器
// 添加请求拦截器
service.interceptors.request.use(function(config) {
  const token = store.state.user.token
  // 如果当前存有token,就加在请求头上
  if (token) {
    config.headers['Authorization'] = `Bearer ${token}`
    // 首先要确定有token  在看是否过期
    if (ExpirationTime()) {
      store.commit('user/delToken')
      store.commit('user/delUserInfo')
      router.push('/login') // 过期就跳到登录页面
      return Promise.reject(new Error('token过期了,请重新登录'))
    }
  }
  return config
}, function(error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})
// service.interceptors.response.use() // 响应拦截器
// 添加响应拦截器
service.interceptors.response.use(function(response) {
  // 解决业务状态码失败不提示错误的问题  取反 如果这个数据不等于trun
  if (!response.data.success) {
    // 抛出错误信息
    return Promise.reject(new Error(response.data.message))
  }
  return response.data // 直接抛出需要的data
}, function(error) {
  // console.log(error.response)
  if (error.response.status === 401) {
    // 说明错误信息 清空信息 跳转到首页
    store.commit('user/delToken')
    store.commit('user/delUserInfo')
    router.push('/login') // 过期就跳到登录页面
  }
  // 对响应错误做点什么
  return Promise.reject(error)
})
export default service // 导出axios实例
